講起版本這件事,肯定每間公司的進版規則都不一樣
甚至是明明同一間公司,但在各地區(國內、國外工廠)的規則不一致
這種狀況會發生還是有可能的
或許同樣是文件,但是文件類別不同也有進版上的差異
例如 00->01->02 或 A1->B1->C1 或 A1->A2->A3
這種時候就真的要在早期規劃清楚
朝向另一個開版本欄位,並在變更單發行時自動寫入新版本
接著在ECN、EN、ECO等流程中,發行時寫入新版本,此時的欄位皆為客製版本欄位,如果Agile生命週期跟Aras系統用法不同,也要另外客製,如下圖的受影響物件開了新版版本
那麼只是把欄位建立好,發行時寫入料號
最後只剩進版規則如何調整
如果用系統規則進版,最多就是先預設好A1、A2...Z1、Z2,慢慢進版,也無法靠類別不同改成00、01
勢必在變更單中自動客製程式,載入新版版本
舉了實例
譬如
EN變更(量產前) => 00->01->02
ECN變更(量產後) => A1 -> B1 -> C1
圖文變更 => A1 -> B1 -> C1 ,非量產或特定類別 00->01->02
用程式碼來看
//當受影響物件版本欄位為空值
if(affectItem.getProperty("cn_new_revision","")==""){
//取得物件的版本
string strOldRevision = itmChangedItem.getProperty("cn_revision","");
if(strOldRevision!=""){
int tryResult=0;
if(int.TryParse(strOldRevision,out tryResult)){
//前一版數字,但在ECN轉A1,EN就繼續數字+1
if(currentChangeType=="ECN"){
sql="Update [innovator].[affected_item] set cn_new_revision='A1' where id='"+affectItem.getID()+"'";
}else{
//純數字+1
int intOldRev = int.Parse(strOldRevision);
string newRev = (intOldRev+1).ToString().PadLeft(2,'0');
sql="Update [innovator].[affected_item] set cn_new_revision='"+newRev+"' where id='"+affectItem.getID()+"'";
}
}else{
//前一版不是數字,則看物件類型累加
//料號
if(changeItemType=="Part"){
int oldRevStr1 = Convert.ToInt32((strOldRevision.Substring(0,1))[0]);
int oldRevStr2 = Convert.ToInt32(strOldRevision.Substring(1,1));
int totalOldRev = oldRevStr1*10+oldRevStr2;
int totalNewRev = totalOldRev+1;
string strNewRev = totalNewRev.ToString();
string newRevStr1 = strNewRev.Substring(0,2);
string newRevStr2 = strNewRev.Substring(2,1);
strNewRev = Encoding.ASCII.GetString(new byte[]{ Convert.ToByte(int.Parse(newRevStr1)) })+newRevStr2;
sql="Update [innovator].[affected_item] set cn_new_revision='"+strNewRev+"' where id='"+affectItem.getID()+"'";
}else{
//Document、CAD
int oldRevStr1 = Convert.ToInt32((strOldRevision.Substring(0,1))[0]);
int oldRevStr2 = Convert.ToInt32(strOldRevision.Substring(1,1));
int totalNewRev,totalOldRev = 0;
switch(itmChangedItem.getProperty("classification","")){
case "D_Production Facility(生產設備)":
//用A1->A2->A3進版
totalOldRev = oldRevStr1*10+oldRevStr2;
totalNewRev = totalOldRev+1;
break;
default:
//用A1->B1->C1進版
if((strOldRevision.Substring(0,1))[0]=='Z'){
oldRevStr1 = Convert.ToInt32('A');
oldRevStr2 = oldRevStr2+1;
if(oldRevStr2==10){
oldRevStr2 = 1;
}
}else{
oldRevStr1 = oldRevStr1 + 1;
}
totalOldRev = oldRevStr1*10+oldRevStr2;
totalNewRev = totalOldRev;
break;
}
string strNewRev = totalNewRev.ToString();
string newRevStr1 = strNewRev.Substring(0,2);
string newRevStr2 = strNewRev.Substring(2,1);
strNewRev = Encoding.ASCII.GetString(new byte[]{ Convert.ToByte(int.Parse(newRevStr1)) })+newRevStr2;
sql="Update [innovator].[affected_item] set cn_new_revision='"+strNewRev+"' where id='"+affectItem.getID()+"'";
}
}
if(changeItemType=="Part" || changeItemType=="Document" ||changeItemType=="CAD"){
inn.applySQL(sql);
}
}
}